import router from "./router";
import { useAppStoreWithOut } from "@/store/modules/app";
import { useTitle } from "@/hooks/web/useTitle";
import { useNProgress } from "@/hooks/web/useNProgress";
import { usePermissionStoreWithOut } from "@/store/modules/permission";
import { usePageLoading } from "@/hooks/web/usePageLoading";
import { NO_REDIRECT_WHITE_LIST } from "@/constants";
import { useUserStoreWithOut } from "@/store/modules/user";
import { useI18n } from "@/hooks/web/useI18n";

const { start, done } = useNProgress();
const { loadStart, loadDone } = usePageLoading();

// 路由前置守卫
router.beforeEach(async (to, from, next) => {
  start(); // 开启顶部加载进度条
  loadStart(); // 开启页面加载 loading 动画

  const permissionStore = usePermissionStoreWithOut();
  const appStore = useAppStoreWithOut();
  const userStore = useUserStoreWithOut();

  // 判断是否已经登录（可根据你的 userStore.getUserInfo 结构调整）
  if (userStore.getToken) {
    // 已登录用户访问登录页，重定向到首页
    if (to.path === "/login") {
      next({ path: "/" });
      return;
    }

    // 判断是否已经添加过动态路由
    if (permissionStore.getIsAddRouters) {
      next();
      return;
    }

    // 获取角色权限对应的路由（后台返回的路由或者角色数组）
    const roleRouters = userStore.getRoleRouters || [];

    // 动态路由逻辑控制
    if (appStore.getDynamicRouter) {
      if (appStore.serverDynamicRouter) {
        // 从服务端获取动态路由
        await permissionStore.generateRoutes("server", roleRouters);
      } else {
        // 使用前端定义的动态路由表进行权限过滤
        await permissionStore.generateRoutes("frontEnd", roleRouters);
      }
    } else {
      // 使用静态路由
      await permissionStore.generateRoutes("static");
    }

    // 添加生成的动态路由
    permissionStore.getAddRouters.forEach((route) => {
      router.addRoute(route); // Vue 3 的 addRoute 可直接接收对象
    });

    // 处理重定向
    const redirectPath = from.query.redirect || to.path;
    const redirect = decodeURIComponent(redirectPath);
    const nextData =
      to.path === redirect ? { ...to, replace: true } : { path: redirect };

    permissionStore.setIsAddRouters(true);
    next(nextData);
  } else {
    // 未登录用户是否在白名单中
    if (NO_REDIRECT_WHITE_LIST.indexOf(to.path) !== -1) {
      next();
    } else {
      console.log(1111);
      // 重定向到登录页面，并记录原始路径
      next(`/login?redirect=${to.path}`);
    }
  }
});

// 路由后置守卫
router.afterEach((to) => {
  if (to?.meta?.title) {
    useTitle(to.meta.title);
  } // 设置页面标题
  done(); // 结束顶部加载进度条
  loadDone(); // 关闭页面加载动画
});
